home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Dev / Lang / Nano.lha / nano / prog / primenum.n < prev    next >
Encoding:
Text File  |  2002-11-23  |  2.7 KB  |  140 lines

  1. // finds prime-numbers, conv from a C-source
  2. //  change user settings
  3.  
  4. decsub showtime ();
  5.  
  6. int search; int showtime;
  7. lint limit; lint sqrlimit; lint i; lint j; int max; lint max2;
  8.  
  9. // for formatted output:
  10.  
  11. int maxnum; int startnum; int proutp; int linecount; int maxline;
  12. lint prnum; int prspace;
  13.  
  14.  
  15. // USER SETTINGS --------------------------------------------------------
  16.  
  17. #arraycheck_off
  18.  
  19. maxnum = 10;        numbers per line
  20.  
  21. proutp = 0;         for printer-formatted output set to 1
  22. maxline = 69;       max lines per page
  23.  
  24. showtime = 0;       print time info  (0 / 1)
  25.  
  26. sqrlimit = 310;     number limit
  27.  
  28. // ----------------------------------------------------------------------
  29.  
  30. limit = sqrlimit * sqrlimit;
  31.  
  32. max2 = limit -- 1;
  33.  
  34. _vmuse = 1; _vmbsize = limit * _intsize; _vmcachesize = 30000;
  35.  
  36. int primbuf[limit];
  37.  
  38. // initialize array by zero
  39.  
  40. init primbuf 0;
  41.  
  42. fopen 1, "primes.txt", "w";
  43.  
  44. if showtime = 1;
  45.     fwrite 1, "start-time ";
  46.     call showtime ();
  47. endif;
  48.  
  49. print /c;
  50. locate 1 3; print "searching primes...";
  51.  
  52. search = 0; i = 2;
  53. while search = 0;
  54.     max = primbuf[i];
  55.     if max = 1;
  56.         inc i;
  57.     endif;
  58.  
  59.     j = i + i;
  60.  
  61.     while j <= max2;
  62.         primbuf[j] = 1;
  63.         j = j + i;
  64.     wend;
  65.  
  66.     search = i >= sqrlimit;
  67.     inc i;
  68.  
  69.     locate 3 3;
  70.     print "done: ", i, " of ", sqrlimit, /n;
  71. wend;
  72.  
  73. print /c;
  74. locate 1 3; print "writing primes to 'primes.txt'", /n2;
  75.  
  76. i = 2; startnum = 0; linecount = 0; prnum = 10; prspace = 6;
  77.  
  78. while i <= max2;
  79.     max = primbuf[i];
  80.     if max = 0;
  81.         inc startnum;
  82.         if startnum = 1;
  83.             if proutp;
  84.                 fwrite 1, /s4;      print left margin
  85.             endif;
  86.         endif;
  87.  
  88.         if i > prnum;
  89.             if i < 100000L;
  90.                 prnum = prnum * 10;
  91.                 dec prspace;
  92.             endif;
  93.         endif;
  94.         fwrite 1, /s prspace;
  95.  
  96.         fwrite 1, i;
  97.  
  98.         if startnum = maxnum;
  99.             fwrite 1, /n;
  100.  
  101.             if proutp;
  102.                 inc linecount;
  103.  
  104.                 if linecount = maxline;
  105.                     fwrite 1, /n3;
  106.                     linecount = 0;
  107.                 endif;
  108.             endif;
  109.  
  110.             startnum = 0;
  111.         endif;
  112.     endif;
  113.  
  114.     inc i;
  115. wend;
  116. fwrite 1, /n2;
  117.  
  118. if showtime = 1;
  119.     fwrite 1, "stop-time ";
  120.     call showtime ();
  121. endif;
  122. fclose 1;
  123. exit;
  124.  
  125. sub showtime ();
  126.     int n;
  127.  
  128.     n = 0;
  129.     time;
  130.     _year = _year + 1900;
  131.  
  132.     if _day < 10; fwrite 1, n; endif; fwrite 1, _day, "-";
  133.     if _month < 10; fwrite 1, n; endif; fwrite 1, _month, "-";
  134.     fwrite 1, _year, /s2;
  135.  
  136.     if _hour < 10; fwrite 1, n; endif; fwrite 1, _hour, ":";
  137.     if _min < 10; fwrite 1, n; endif; fwrite 1, _min, ":";
  138.     if _sec < 10; fwrite 1, n; endif; fwrite 1, _sec, /n2;
  139. endsub;
  140.